// Loesung_von_Aufgabe_3.7_6a_grosse_Sonne

float k = 230; // k = Gamma*M im Maßstab 1:10^18
float t = 1; // Zeit

// Der Abstand von 100 Pixel zwischen Sonne und Planet entspricht 10^9 m
PVector Sonne = new PVector(200, 200); // Ortsvektor der Sonne
PVector Planet = new PVector(200, 300); // Ortsvektor des Planeten
PVector v = new PVector(-1.0, 0); // Geschwindigkeitvektor des Planeten

void setup()
{
  size(400, 400);
}

void draw()
{
  background(255);

  /* Der Abstand r zwischen Sonne und Planet und der Betrag aB der Gravitationsbeschleunigung werden berechnet.
   Um die Division durch 0 zu verhindern, wird ein kleiner Wert auf die Distanz addiert */
  float r = Sonne.dist(Planet) + 1;
  float aB = k/(r*r); 

  /* Zuerst wird die vektorielle Differenz zwischen Sonne und Planet berechnet, dann auf 1 normiert
   und anschließend mit dem Betrag aB der Beschleunigung multipliert */
  PVector a = PVector.sub(Sonne, Planet).normalize().mult(aB); 

  v.add(PVector.mult(a, t)); // a wird mit t multipliziert und zu Vektor v addiert
  Planet.add(PVector.mult(v, t)); // v wird mit t multipliziert und zu dem Ortsvektor Planet addiert

  // Sonne
  stroke(255, 0, 0);
  fill(255, 200, 0); 
  ellipse(Sonne.x, Sonne.y, 40, 40);

  // Planet
  stroke(100);
  strokeWeight(2);
  fill(100, 100, 255); 
  ellipse(Planet.x, Planet.y, 15, 15);
}